Przykad 8.3. Zastosowanie przeszukiwania wszerz do znajdowania cieki powikszajcej
public boolean findAugmentingPath (VertexInfo[] vertices) {
   // Zacznij potencjaln ciek powikszajc w rdle z maksymalnym
   // przepywem
   vertices[sourceIndex] = new VertexInfo (-1);
   DoubleLinkedList<Integer> path = new DoubleLinkedList<Integer>();
   path.insert (sourceIndex);

   // Przetwrz krawdzie przednie z u; nastpnie sprbuj z krawdziami tylnymi,
   // wchodzcymi do u
   VertexStructure struct[] = network.getEdgeStructure();
   while (!path.isEmpty()) {
      int u = path.removeFirst();

      Iterator<EdgeInfo> it = struct[u].forward();  // krawdzie wychodzce z u
      while (it.hasNext()) {
         EdgeInfo ei = it.next();
         int v = ei.end;

         // Jeszcze nie odwiedzony i ma niewykorzystan przepustowo?
         // Zaplanuj zwikszenie
         if (vertices[v] == null && ei.capacity > ei.flow) {
            vertices[v] = new VertexInfo (u, FORWARD);
            id (v == sinkIndex) { return true; }   // cieka ukoczona,
            path.insert(v);           // a jak nie, to docz do kolejki
         }
      }

      it = struct[u].backward();             // krawdzie wchodzce do u
      while (it.hasNext()) {
         // Sprbuj znale krawd wchodzc do u, ktrej przepyw
         // mona zredukowa
         EdgeInfo rei = it.next();
         int v = rei.start;

         // Jeszcze nie odwiedzony (nie moe by ujciem!) i ma przepyw
         // do redukcji?
         if (vertices[v] == null && rei.flow > 0) {
            vertices[v] = new VertexInfo (u, BACKWARD);
            path.insert(v);                  // dodaj do kolejki
         }
      }
   }

   return false;                // nie znaleziono cieki powikszajcej
}
